package service

// QueryRequest 关键字和分页信息结构体
type QueryRequest struct {
	Page    int    `json:"page" form:"page"`
	Size    int    `json:"size" form:"size"`
	Keyword string `json:"keyword" form:"keyword"`
}

////////////////////////////////////////////////////

// LoginPasswordRequest 接收登录参数结构体
type LoginPasswordRequest struct {
	UserName string `json:"username"`
	Password string `json:"password"`
}

type LoginPasswordReply struct {
	Token        string `json:"token"`
	RefreshToken string `json:"refreshToken"`
}

// GetUserListRequest 获取管理员列表参数结构体
type GetUserListRequest struct {
	*QueryRequest
}

// GetUserListReply 返回管理员信息结构体
type GetUserListReply struct {
	ID        uint   `json:"id"`
	Username  string `json:"username"`
	Avatar    string `json:"avatar"`
	Phone     string `json:"phone"`
	CreatedAt string `json:"created_at"`
	UpdatedAt string `json:"updated_at"`
}

// AddUserRequest 接收添加管理表单数据的结构体
type AddUserRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
	Phone    string `json:"phone"`
	Email    string `json:"email"`
	Remarks  string `json:"remarks"`
	RoleId   uint   `json:"roleId"`
	Avatar   string `json:"avatar"`
	Sex      string `json:"sex"`
}

type GetUserDetailReply struct {
	ID uint `json:"id"`
	AddUserRequest
}

type UpdateUserRequest struct {
	ID uint `json:"id"`
	AddUserRequest
}

////////////////////////////////////////////////////

type GetRoleListRequest struct {
	*QueryRequest
}

// GetRoleListReply 返回角色列表数据结构体
type GetRoleListReply struct {
	ID        uint   `json:"id"`
	Name      string `json:"name"`
	Sort      int    `json:"sort"`
	IsAdmin   int    `json:"is_admin"`
	CreatedAt string `json:"created_at"`
	UpdatedAt string `json:"updated_at"`
}

type AddRoleRequest struct {
	Name    string `json:"name"`
	Sort    int64  `json:"sort"`
	IsAdmin int8   `json:"isAdmin"`
	Remarks string `json:"remarks"`
	MenuId  []uint `json:"menuId"`
}

// 返回角色详情信息结构体
type GetRoleDetailReply struct {
	ID uint `json:"id"`
	AddRoleRequest
}

// 更新角色信息结构体
type UpdateRoleRequest struct {
	ID uint `json:"id"`
	AddRoleRequest
}

// AllRoleListReply 返回角色结构体
type AllRoleListReply struct {
	ID   uint   `json:"id"`
	Name string `json:"name"`
}

////////////////////////////////////////////////////

// MenuReply 菜单列表数据返回结构体
type MenuReply struct {
	ID            uint         `json:"id"`
	ParentId      uint         `json:"parent_id"`
	Name          string       `json:"name"`
	WebIcon       string       `json:"web_icon"`
	Sort          int          `json:"sort"`
	Path          string       `json:"path"`
	Level         int          `json:"level"`
	ComponentName string       `json:"component_name"`
	SubMenus      []*MenuReply `json:"sub_menus"`
}

// AllMenu 所有菜单数据结构体
type AllMenu struct {
	ID            uint   `json:"id"`
	ParentId      uint   `json:"parent_id"`
	Name          string `json:"name"`
	WebIcon       string `json:"web_icon"`
	Sort          int    `json:"sort"`
	Path          string `json:"path"`
	Level         int    `json:"level"`
	ComponentName string `json:"component_name"`
}

// AddMenuRequest 新增菜单结构体
type AddMenuRequest struct {
	ParentId      uint   `json:"parent_id"`      // 父级菜单唯一标志，不填默认为顶级菜单
	Name          string `json:"name"`           // 菜单名称
	WebIcon       string `json:"web_icon"`       // 网页图标
	Path          string `json:"path"`           // 路径
	Sort          int    `json:"sort"`           // 排序
	Level         int    `json:"level"`          // 菜单等级，{0：目录，1：菜单，2：按钮}
	ComponentName string `json:"component_name"` // 组件路径
}

// UpdateMenuRequest 接收更新菜单信息的结构体
type UpdateMenuRequest struct {
	ID uint `json:"id"`
	AddMenuRequest
}

// //////////////////////////////////////////////////
// UpdatePwdRequest 更新个人密码结构体
type UpdatePwdRequest struct {
	UsedPass string `json:"usedPass"`
	NewPass  string `json:"newPass"`
}

////////////////////////////////////////////////////

// GetLogListReply 返回日志信息的结构体
type GetLogListReply struct {
	ID          uint   `json:"id"`
	Browser     string `json:"browser"`
	ClassMethod string `json:"class_method"`
	HttpMethod  string `json:"http_method"`
	RemoteAddr  string `json:"remote_addr"`
	StatusCode  int    `json:"status_code"`
	UseTime     string `json:"use_time"`
	CreatedAt   string `json:"created_at"`
	User        string `json:"user"`
}

// GetLogListRequest 获取日志类别参数结构体
type GetLogListRequest struct {
	*QueryRequest
}
